home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
c
/
recio202.zip
/
recio.h
< prev
next >
Wrap
C/C++ Source or Header
|
1994-05-05
|
9KB
|
232 lines
/****************************************************************************
MODULE: recio.h
PURPOSE: record input/output header file included in application
COPYRIGHT: (C) 1994 William Pierpoint
VERSION: 2.02
RELEASE: May 5, 1994
*****************************************************************************/
#ifndef RECIO_H
#define RECIO_H
typedef struct {
int r_fd; /* descriptor */
unsigned r_flags; /* status flags */
FILE *r_fp; /* file pointer */
const char *r_fname; /* pointer to name of file */
long r_recno; /* current record number */
size_t r_fldno; /* current field number */
size_t r_colno; /* current column number in current record */
size_t r_recsiz; /* size of record buffer */
size_t r_reclen; /* current length of record buffer */
char *r_recp; /* pointer to record buffer */
size_t r_fldsiz; /* size of field buffer */
char *r_fldp; /* pointer to field buffer */
int r_fldch; /* field separator character */
int r_txtch; /* text delimiter character */
int r_cxtno; /* context number */
} REC;
/* constant expression macros */
#define RECBUFSIZ 80 /* minimum size of record buffer */
#define FLDBUFSIZ 20 /* minimum size of field buffer */
#define RECFLDCH ' ' /* record field separator character */
#define RECTXTCH ' ' /* text delimiter character */
#define ROPEN_MAX 8 /* max no of rec streams open at same time */
#define R_READ 0 /* read mode */
#define R_WRITE 1 /* write/append mode */
#ifdef __BORLANDC__
#define NSBUFSIZ 34 /* string buffer sized for ltoa & dtoa */
#else
#error set NSBUFSIZ for this compiler!
#endif
extern char _r_nsbuf[NSBUFSIZ]; /* numeric to string conversion buffer */
/* enumerate errors */
enum {
R_EINVAL=1, /* invalid argument value */
R_EINVDAT, /* invalid data */
R_EINVMOD, /* invalid read or write mode */
R_EMISDAT, /* missing data */
R_ENOMEM, /* could not allocate memory */
R_ENOPUT, /* failed put to stream */
R_ERANGE /* data out of range */
};
/* enumerate warnings */
enum {
R_WEMPSTR=1, /* data string empty */
R_WNOREG, /* unable to register function (atexit full) */
R_WWIDTH /* column width too small for data */
};
/* define static record streams */
extern REC *recin; /* recin record pointer */
extern REC *recout; /* recout record pointer */
extern REC *recerr; /* recerr record pointer */
extern REC *recprn; /* recprn record pointer */
#define RECIN -1 /* recin context number */
#define RECOUT -2 /* recout context number */
#define RECERR -3 /* recerr context number */
#define RECPRN -4 /* recprn context number */
/* record status flags definitions */
#define _R_COL 1 /* beginning column flag (bit 0) */
#define _R_WRT 2 /* read/write stream flag (bit 1) */
#define _R_EOF 128 /* end-of-file indicator (bit 7) */
#define _R_ERR 256 /* error indicator (bits 8-11) */
#define _R_WRN 4096 /* warning indicator (bits 12-15) */
#define _R_ERRMAX 15 /* maximum error number */
#define _R_WRNMAX 15 /* maximum warning number */
/* functions implemented as macros */
#define rskipfld(rp) (rskipnfld((rp), 1))
#define rnames(rp) ((rp)->r_fname)
#define rrecs(rp) ((rp)->r_recp)
#define rflds(rp) ((rp)->r_fldp)
#define rrecno(rp) ((rp)->r_recno)
#define rfldno(rp) ((rp)->r_fldno)
#define rcolno(rp) ((rp)->r_colno + rbegcolno(rp))
#define rcxtno(rp) ((rp)->r_cxtno)
#define rbegcolno(rp) ((rp)->r_flags & _R_COL)
#define reof(rp) ((rp)->r_flags & _R_EOF)
#define rgeti(rp) (rbgeti( (rp), 10))
#define rgetl(rp) (rbgetl( (rp), 10))
#define rgetui(rp) (rbgetui((rp), 10))
#define rgetul(rp) (rbgetul((rp), 10))
#define rcgeti(rp, begcol, endcol) (rcbgeti( (rp), (begcol), (endcol), 10))
#define rcgetl(rp, begcol, endcol) (rcbgetl( (rp), (begcol), (endcol), 10))
#define rcgetui(rp, begcol, endcol) (rcbgetui((rp), (begcol), (endcol), 10))
#define rcgetul(rp, begcol, endcol) (rcbgetul((rp), (begcol), (endcol), 10))
#define rputi(rp, num) (rbputi( (rp), 10, (num)))
#define rputl(rp, num) (rbputl( (rp), 10, (num)))
#define rputui(rp, num) (rbputui((rp), 10, (num)))
#define rputul(rp, num) (rbputul((rp), 10, (num)))
#define rcputi(rp, begcol, endcol, num) (rcbputi( (rp), (begcol), (endcol), 10, (num)))
#define rcputl(rp, begcol, endcol, num) (rcbputl( (rp), (begcol), (endcol), 10, (num)))
#define rcputui(rp, begcol, endcol, num) (rcbputui((rp), (begcol), (endcol), 10, (num)))
#define rcputul(rp, begcol, endcol, num) (rcbputul((rp), (begcol), (endcol), 10, (num)))
#ifdef __cplusplus
extern "C" {
#endif
/* function prototypes */
/* source: recio.c */
extern int rclose(REC *rp);
extern int rcloseall(void);
extern int risvalid(REC *rp);
extern REC *ropen(const char *filename, const char *mode);
extern int rsetbegcolno(REC *rp, int colno);
extern int rsetcxtno(REC *rp, int cxtno);
extern int rsetfldch(REC *rp, int ch);
extern int rsettxtch(REC *rp, int ch);
/* source: rerr.c */
extern void rclearerr(REC *rp);
extern int rerror(REC *rp);
extern char *rerrstr(REC *rp);
extern int rseterr(REC *rp, int errnum);
extern void rseterrfn(void(*rerrfn)(REC *rp));
extern char *rstrerror(int errnum);
/* source: rwarn.c */
extern void rclearwarn(REC *rp);
extern int rwarning(REC *rp);
extern char *rwarnstr(REC *rp);
extern int rsetwarn(REC *rp, int warnum);
extern void rsetwarnfn(void(*rwarnfn)(REC *rp));
extern char *rstrwarning(int warnum);
/* source: rget.c */
extern char *rgetrec(REC *rp);
extern int rsetfldsiz(REC *rp, size_t fldsize);
extern int rsetfldstr(REC *rp, char *s);
extern int rsetrecsiz(REC *rp, size_t recsize);
extern int rsetrecstr(REC *rp, char *s);
extern int rskipnfld(REC *rp, size_t num);
/* source: rput.c */
extern int rputrec(REC *rp);
/* source: rgets.c */
extern int rgetc(REC *rp);
extern char *rgets(REC *rp);
/* source: rgetf.c */
extern float rgetf(REC *rp);
extern double rgetd(REC *rp);
/* source: rbget.c */
extern int rbgeti( REC *rp, int base);
extern unsigned int rbgetui(REC *rp, int base);
extern long rbgetl( REC *rp, int base);
extern unsigned long rbgetul(REC *rp, int base);
/* source: rcgets.c */
extern int rcgetc(REC *rp, size_t col);
extern char *rcgets(REC *rp, size_t begcol, size_t endcol);
/* source: rcgetf.c */
extern float rcgetf(REC *rp, size_t begcol, size_t endcol);
extern double rcgetd(REC *rp, size_t begcol, size_t endcol);
/* source: rcbget.c */
extern int rcbgeti( REC *rp, size_t begcol, size_t endcol, int base);
extern unsigned int rcbgetui(REC *rp, size_t begcol, size_t endcol, int base);
extern long rcbgetl( REC *rp, size_t begcol, size_t endcol, int base);
extern unsigned long rcbgetul(REC *rp, size_t begcol, size_t endcol, int base);
/* source: rputs.c */
extern int rputc(REC *rp, int ch);
extern int rputs(REC *rp, char *str);
/* source: rputf.c */
extern int rputf(REC *rp, float f);
extern int rputd(REC *rp, double d);
/* source: rbput.c */
extern int rbputi(REC *rp, int base, int i);
extern int rbputui(REC *rp, int base, unsigned int ui);
extern int rbputl(REC *rp, int base, long l);
extern int rbputul(REC *rp, int base, unsigned long ul);
/* source: rcputf.c */
extern int rcputf(REC *rp, size_t begcol, size_t endcol, float f);
extern int rcputd(REC *rp, size_t begcol, size_t endcol, double d);
/* source: rcputs.c */
extern int rcputc(REC *rp, size_t col, int ch);
ex